package com.pb.infra.auth.mapper.custom;

import com.pb.infra.auth.entity.custom.PriviInterCustom;
import com.pb.infra.auth.entity.custom.PriviMenuCustom;
import com.pb.infra.auth.entity.custom.PriviRoleCustom;
import com.pb.infra.auth.entity.custom.PriviUserCustom;
import com.pb.infra.auth.entity.pbsys.PriviUser;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 用户管理
 *
 * @author liudebao
 * @date 2020/1/1
 */
@Mapper
@Repository
public interface PriviUserCustomMapper {

    /**
     * 查询用户
     *
     * @param map
     * @return
     */
    List<Map<String, Object>> select(Map<String, Object> map);

    /**
     *查询用户岗位
     * @param map
     * @return
     */
    List<Map<String, Object>> selectPost(Map<String, Object> map);

    /**
     *查询用户条线
     * @param map
     * @return
     */
    List<Map<String, Object>> selectLine(Map<String, Object> map);

    /**
     *查询用户组织架构
     * @param map
     * @return
     */
    List<Map<String, Object>> selOrgId(Map<String, Object> map);

    /**
     *修改状态
     * @param user
     */
    void updateStatus(PriviUser user);

    /**
     *查询职位
     * @param map
     * @return
     */
    List<Map<String, Object>> selectPosition(Map<String, Object> map);

    /**
     *密码策略
     * @param map
     * @return
     */
    List<Map<String, Object>> selPwdPolicy(Map<String, Object> map);

    /**
     *修改职位状态
     * @param map
     */
    void updatePositionStatus(Map<String, Object> map);

    /**
     *主职位
     * @param userId
     * @return
     */
    List<Map<String, Object>> selMainPosition(String userId);

    /**
     *用户编号是否存在
     * @param map
     * @return
     */
    List<Map<String, Object>> selUserInfo(Map<String, Object> map);

    /**
     *职位信息
     * @param map
     * @return
     */
    List<Map<String, Object>> selPositionInfo(Map<String, Object> map);

    /**
     *所有职位
     * @param map
     * @return
     */
    List<Map<String, Object>> selectAllPosition(Map<String, Object> map);

    /**
     *密码策略信息
     * @param passwdPolicyId
     * @return
     */
    Map<String, Object> selPolicyInfo(String passwdPolicyId);

    /**
     *密码策略错误次数
     * @param passwdPolicyId
     * @return
     */
    int selErrorTimes(String passwdPolicyId);

    /**
     *主策略
     * @param positionId
     * @return
     */
    List<Map<String, Object>> selMainPolicy(String positionId);

    /**
     *密码策略
     * @param map
     * @return
     */
    List<Map<String, Object>> selPolicyData(Map<String, Object> map);

    /**
     *重置密码
     * @param map
     */
    void resetPasswd(Map<String, Object> map);

    /**
     *用户所有密码策略
     * @param userId
     * @return
     */
    List<Map<String, Object>> selPolicy(String userId);

    /**
     * 用户编号是否存在
     * @param userId
     * @return
     */
    PriviUserCustom loadUserByUsername(String userId);

    /**
     * 用户角色
     * @param userId
     * @return
     */
    List<PriviRoleCustom> selRoleByUserId(String userId);

    /**
     * 角色菜单
     * @param userId
     * @return
     */
    List<PriviMenuCustom> selRoleMenuByUserId(String userId);

    /**
     * 角色菜单
     * @param map
     * @return
     */
    List<PriviInterCustom> selAdminRoleMenuByUserId(Map<String, Object> map);

    /**
     * 某职位角色
     * @param map
     * @return
     */
    List<PriviRoleCustom> selOtherRoleByUserId(Map<String, Object> map);

    /**
     * 角色菜单
     * @param map
     * @return
     */
    List<PriviInterCustom> selAdminRoleMenuByUserPosId(Map<String, Object> map);

    /**
     * 角色菜单接口
     * @param map
     * @return
     */
    List<PriviMenuCustom> selRoleMenuByUserPosId(Map<String, Object> map);

    /**
     * 修改用户
     * @param map
     */
    void updateUser(Map<String, Object> map);

    /**
     * 职位对应组织架构
     * @param map
     * @return
     */
    List<Map<String, Object>> selOrgByPosition(Map<String, Object> map);

    /**
     * 职位对应岗位
     * @param map
     * @return
     */
    List<Map<String, Object>> selPostByPosition(Map<String, Object> map);

    /**
     * 组织架构
     * @param orgId
     * @return
     */
    List<Map<String, Object>> selOrgByUpper(String orgId);

    /**
     * 主职位删除标识
     * @param useId
     * @return
     */
    List<Map<String, Object>> selPositionByUser(String useId);

    List<String> selDeviceRegId(List<String> list);
}
